CSAPP 计算机系统漫游

《深入理解计算机系统》第1章笔记

信息就是位+上下文

整个计算机系统中的所有信息都可以用一串比特串的形式表示,区分不同的数据对象的唯一方法就是我们读到的这些对象时的上下文(context)

程序被其他程序翻译成不同的格式

一个高级语言写的程序(这里以C语言为例),从源代码到最终的机器中的可执行文件会经过一下几个阶段:

  1. 预处理阶段,处理源码的中的预处理语句(比如说#include)
  2. 编译阶段,将c语言编译成汇编语言
  3. 汇编阶段,把汇编语言翻译成机器指令
  4. 链接阶段,把在程序中调用的库函数的相关文件引入

了解编译系统如何工作室大有益处的

促使程序员要知道编译系统是如何工作的原因:

  1. 优化程序性能,我们需要对汇编语言以及编译器如何将不同的C语句转化为汇编语言有基本的了解
  2. 理解链接时出现的错误
  3. 避免安全漏洞,其中一个比较典型的是缓冲区溢出错误

处理器读并解释存储在存储器中的指令

一个计算机系统的硬件主要由以下几个部分组成:

  1. 总线,负责携带信息字节并在各个部件之间进行传输
  2. I/O设备,负责系统和外界的联系
  3. 主存,运行程序时存放程序以及程序中含有的数据
  4. 处理器,解释(或执行)存储在主存中的指令

执行一个hello程序的过程有一下几部:

  • shell程序执行其指令,等待我们输入命令
  • 我们输入完命令以后,shell执行一系列指令,将hello程序的代码以及其数据加载到主存中
  • 处理器开始执行hello程序中的机器指令,将“hello world”输出到屏幕上

高速缓存

我们使用的存储设备通常是较大的存储设备比较小的存储设备运行地要慢,所以就使用一个较小的速度较快的存储设备作为CPU和Main Memory交换数据的桥梁,这个设备就是高速缓存(cache memories)

形成层次结构的存储结构

在计算机系统的存储设备被组织成了一个金字塔形的存储层次模型,其中从上到下,设备速度越来越慢,空间越来越大,每字节的造价越来越便宜。

enter description here

操作系统管理硬件

操作系统可以看成是一个应用程序和硬件之间的一个软件,其有两个基本功能: 防止硬件被失控的程序滥用; 为应用程序提供控制硬件的简单一致的方法

进程

进程可以看成是操作系统对正在运行的程序的一种抽象,在一个系统中可以运行多个进程,这些进程对外表现好像是独占硬件,实际上是通过不同进程之间进程的交互执行实现的,这个过程叫上下文切换(context switch)

线程

一个进程可以由多个线程组成,运行在一个上下文环境中,共享代码以及全局数据。因为共享数据,使得其比一般的进程更加高效(花在context switch的时间少)。

虚拟存储器

给进程提供的一个好像自己独占主存的假象,对于进程的所使用的虚拟存储器可以分成一下几个部分:

  • 程序代码和数据
  • 堆,可以动态扩展或者收缩,供像malloc和free这样的C语言中的库进行调用
  • 共享库
  • 栈,可以动态扩展或者收缩,用于编译器的函数调用
  • 内核虚拟存储器

enter description here

文件

文件可以看成字节序列,每一个I/O设备从本质上来看都可以看成是文件

利用网络系统和其他系统进行通信

导图

enter description here